﻿using System;

namespace fastCSharp.code.cSharp
{
    /// <summary>
    /// TCP调用函数
    /// </summary>
    public class tcpMethod : ignoreMember
    {
        /// <summary>
        /// tcpCall服务名称
        /// </summary>
        public string Service;
        /// <summary>
        /// 服务名称
        /// </summary>
        public virtual string ServiceName
        {
            get { return Service; }
        }
        /// <summary>
        /// HTTP调用名称(有效域为方法)
        /// </summary>
        public string HttpName;
        /// <summary>
        /// 分组标识，0标识无分组(有效域为方法)
        /// </summary>
        public int GroupId;
        /// <summary>
        /// 输入参数最大数据长度,0表示不限(有效域为方法)
        /// </summary>
        public int InputParameterMaxLength;
        /// <summary>
        /// 命令序号(有效域为方法)(不能重复,比如使用枚举),IsIdentityCommand=true时有效
        /// </summary>
        public int CommandIentity = int.MaxValue;
        /// <summary>
        /// 是否验证方法(有效域为方法),一个TCP调用服务只能指定一个验证方法,且返回值类型必须为bool
        /// </summary>
        public bool IsVerifyMethod;
        /// <summary>
        /// 服务器端函数是否显示异步回调(服务配置),(返回值必须为void，最后一个参数必须为回调委托Action(fastCSharp.code.cSharp.methodInfo.asynchronousReturn))
        /// </summary>
        public bool IsServerAsynchronousCallback;
        /// <summary>
        /// 服务器端模拟异步调用是否使用任务池(有效域为方法,对于同步服务器端的验证调用无效)
        /// </summary>
        public bool IsServerAsynchronousTask = true;
        /// <summary>
        /// 客户端回调是否使用任务池(有效域为方法)。警告：如果设置为false，在回调中不能调用远程同步方法，否则死锁
        /// </summary>
        public bool IsClientCallbackTask = true;
        /// <summary>
        /// 客户端是否提供同步调用(有效域为方法)
        /// </summary>
        public bool IsClientSynchronous = true;
        /// <summary>
        /// 客户端是否提供异步调用(有效域为方法)
        /// </summary>
        public bool IsClientAsynchronous;
        /// <summary>
        /// 客户端异步回调是否公用输入参数(有效域为方法)
        /// </summary>
        public bool IsClientAsynchronousReturnInputParameter;
        /// <summary>
        /// 客户端是否仅仅发送数据(不需要应答)
        /// </summary>
        public bool IsClientSendOnly;
        /// <summary>
        /// 是否保持异步回调(有效域为方法)
        /// </summary>
        public bool IsKeepCallback;
        /// <summary>
        /// HTTP调用是否仅支持POST(有效域为方法)
        /// </summary>
        public bool IsHttpPostOnly = true;
        /// <summary>
        /// 是否使用JSON序列化(服务配置)
        /// </summary>
        public bool IsJsonSerialize;
        /// <summary>
        /// 序列化是否检测相同的引用成员
        /// </summary>
        public bool IsInputSerializeReferenceMember = true;
        /// <summary>
        /// 序列化是否检测相同的引用成员
        /// </summary>
        public bool IsOutputSerializeReferenceMember = true;
        /// <summary>
        /// 序列化是否处理包装类型
        /// </summary>
        public bool IsInputSerializeBox;
        /// <summary>
        /// 序列化是否处理包装类型
        /// </summary>
        public bool IsOutputSerializeBox = true;
        /// <summary>
        /// 是否仅仅获取字段/属性成员
        /// </summary>
        public bool IsOnlyGetMember = true;
        /// <summary>
        /// 是否过期
        /// </summary>
        public bool IsExpired;
    }
}
